<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    //map()指“映射”，对数组中的每一项运行给定函数，返回每次函数调用的结果组成的数组。 Map是一组键值对的结构,极快的查找速度,Map是一种叫做字典的数据结构
    //共同点：集合、字典可以存储不重复的值//不同点：集合是以[值，值]的形式存储元素，字典是以[键，值]的形式存储

    //map定义和方法 map()方法返回一个新数组，数组中的元素为原始数组元素调用函数处理的后值。map()方法按照原始数组元素顺序依次处理元素。 //map不会改变原始数组 map（）方法不会对空数组进行检测

    var arr = [1, 2, 3, 4, 5];
    var arr2 = arr.map((item) => {
      if (item >= 3) {
        return item - 1 //1 2 2 3 4
      }
      return item * item; // 1 4 2 3 4
    });
    console.log(arr2)



    var arr3 = [0, 2, 4, 6, 8];
    var str = arr3.map(function (item, index, arr3) {
      console.log(this); //Window
      console.log(item);//0 2 ..
      console.log('原数组arr：', arr3); // 会执行五次
      return item / 2;
    }, this);

    console.log(str); //[0,1,2,3,4]  map()方法返回一个新数组

    //set()Set和Map类似，也是一组key的集合，但不存储value。由于key不能重复，所以，在Set中，没有重复的key。Set是一种叫做集合的数据结构
    //集合是由一组无序且唯一(即不能重复)的项组成的，可以想象成集合是一个既没有重复元素，也没有顺序概念的数组//Set 本身是一个构造函数，用来生成 Set 数据结构

    const s = new Set();
    [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
    console.log(s)


    let array1 = [1, 2, 1, 4, 5, 3];
    [...new Set(array1)] // [1, 2, 4, 5, 3]
  </script>
</body>

</html>